package com.tensquare.sms;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;


/**
 * 详细介绍RabbitMQ的用法
 * A      exchange1                     Q1         1
 * B                   routingKey                  2
 * C      exchange2                     Q2         3
 * A,B,C为生产者   1,2,3位消费者   Q1,Q2为队列
 * exchange可以有很多  代表路由   可以绑定到队列
 * routingKey   代表路由规则
 * Q1,Q2为队列  可以有很多   可以和exchange绑定
 *
 * 可以在 RabbitMQ:15672 中设置 exchange,routingKey,队列
 *
 *
 * 直接(Direct): 不用设置路由
 *            rabbitTemplate.convertAndSend(routingKey,object)
 * routingKey这里代表直接传送的队列名称,使用默认的exchange,如队列不存在,抛弃消息
 * rabbitTemplate.convertAndSend("sms","haha");
 *
 * 分列(fanout): 工具设置路由exchange:MM  type:fanout
 *            rabbitTemplate.convertAndSend(exchange,routingKey,object)
 *  exchange: MM   绑定了两个队列  Q1和 Q2
 *  这里不用写routingKey,因为名叫MM的exchange直接绑定Q1和Q2两个队列
 *  将消息发送给路由(exchange),路由就会转发给绑定的队列(Q1,Q2)
 *  rabbitTemplate.convertAndSend("MM","","haha");
 *
 * 主题(topic): 工具设置路由exchange:JK  type:topic
 *   JK路由绑定 Q1,Q2,Q3三个队列
 *   Q1的routingKey(路由规则): haha.#    模糊匹配  haha.mm, haha.mm.ll, haha.hehe
 *   Q2的routingKey(路由规则): #.hehe    模糊匹配  mm.hehe, mm.ll.hehe, haha.hehe
 *   Q3的routingKey(路由规则): haha.hehe 精确匹配  haha.hehe
 *   rabbitTemplate.convertAndSend(exchange,routingKey,object)
 *
 *   发送:
 *   rabbitTemplate.convertAndSend("JK","haha.jk","nihao")   Q1队列收到消息nihao
 *   rabbitTemplate.convertAndSend("JK","jk.hehe","nihao")   Q2队列收到消息nihao
 *   rabbitTemplate.convertAndSend("JK","haha.hehe","nihao") Q1,Q2,Q3队列收到消息nihao
 *
 *
 */
@SpringBootApplication
public class SmsApplication {

	public static void main(String[] args) {
		SpringApplication.run(SmsApplication.class, args);
	}

	
}
